home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / domacnost a kancelar / findgraph / fgraph.exe / {app} / TestApprVB / Form1.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  2006-05-23  |  24.5 KB  |  752 lines

  1. VERSION 5.00
  2. Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
  3. Begin VB.Form Form1 
  4.    Caption         =   "FindGraph automation, Fitting"
  5.    ClientHeight    =   6840
  6.    ClientLeft      =   7365
  7.    ClientTop       =   345
  8.    ClientWidth     =   6420
  9.    LinkTopic       =   "Form1"
  10.    ScaleHeight     =   6840
  11.    ScaleWidth      =   6420
  12.    Begin VB.CommandButton BSpline 
  13.       Caption         =   "B-Spline"
  14.       Height          =   495
  15.       Left            =   4920
  16.       Picture         =   "Form1.frx":0000
  17.       Style           =   1  'Graphical
  18.       TabIndex        =   14
  19.       ToolTipText     =   "Nonlinear models"
  20.       Top             =   5760
  21.       Width           =   1455
  22.    End
  23.    Begin VB.CommandButton Regression 
  24.       Caption         =   "Regression"
  25.       Height          =   495
  26.       Left            =   4920
  27.       Picture         =   "Form1.frx":05E2
  28.       Style           =   1  'Graphical
  29.       TabIndex        =   13
  30.       ToolTipText     =   "Nonlinear models"
  31.       Top             =   5160
  32.       Width           =   1455
  33.    End
  34.    Begin VB.CommandButton User 
  35.       Caption         =   "User"
  36.       Height          =   495
  37.       Left            =   4920
  38.       Picture         =   "Form1.frx":0BC4
  39.       Style           =   1  'Graphical
  40.       TabIndex        =   10
  41.       ToolTipText     =   "User defined DLL"
  42.       Top             =   4545
  43.       Width           =   1455
  44.    End
  45.    Begin VB.CommandButton Curve 
  46.       Caption         =   "Piece"
  47.       Height          =   495
  48.       Left            =   4920
  49.       Picture         =   "Form1.frx":11A6
  50.       Style           =   1  'Graphical
  51.       TabIndex        =   9
  52.       ToolTipText     =   "Piece Linear"
  53.       Top             =   1475
  54.       Width           =   1455
  55.    End
  56.    Begin VB.CommandButton Nonlinear 
  57.       Caption         =   "Nonlinear"
  58.       Height          =   495
  59.       Left            =   4920
  60.       Picture         =   "Form1.frx":1788
  61.       Style           =   1  'Graphical
  62.       TabIndex        =   8
  63.       ToolTipText     =   "Nonlinear models"
  64.       Top             =   3931
  65.       Width           =   1455
  66.    End
  67.    Begin VB.CommandButton Neural 
  68.       Caption         =   "Neural"
  69.       Height          =   495
  70.       Left            =   4920
  71.       Picture         =   "Form1.frx":1D6A
  72.       Style           =   1  'Graphical
  73.       TabIndex        =   7
  74.       ToolTipText     =   "Neural network approximation"
  75.       Top             =   3317
  76.       Width           =   1455
  77.    End
  78.    Begin VB.CommandButton Fourie 
  79.       Caption         =   "Fourie"
  80.       Height          =   495
  81.       Left            =   4920
  82.       Picture         =   "Form1.frx":234C
  83.       Style           =   1  'Graphical
  84.       TabIndex        =   6
  85.       ToolTipText     =   "Fourie line"
  86.       Top             =   2703
  87.       Width           =   1455
  88.    End
  89.    Begin VB.CommandButton Logistic 
  90.       Caption         =   "Logistic"
  91.       Height          =   495
  92.       Left            =   4920
  93.       Picture         =   "Form1.frx":292E
  94.       Style           =   1  'Graphical
  95.       TabIndex        =   5
  96.       ToolTipText     =   "Logistic model"
  97.       Top             =   2089
  98.       Width           =   1455
  99.    End
  100.    Begin VB.CommandButton Polynomial 
  101.       Caption         =   "Polynomial"
  102.       Height          =   516
  103.       Left            =   4920
  104.       Picture         =   "Form1.frx":2F10
  105.       Style           =   1  'Graphical
  106.       TabIndex        =   0
  107.       ToolTipText     =   "Fit regression line"
  108.       Top             =   840
  109.       Width           =   1452
  110.    End
  111.    Begin MSComctlLib.ListView ListView1 
  112.       Height          =   1215
  113.       Left            =   240
  114.       TabIndex        =   1
  115.       Top             =   4920
  116.       Width           =   4575
  117.       _ExtentX        =   8070
  118.       _ExtentY        =   2143
  119.       View            =   3
  120.       LabelWrap       =   -1  'True
  121.       HideSelection   =   -1  'True
  122.       _Version        =   393217
  123.       ForeColor       =   -2147483640
  124.       BackColor       =   -2147483643
  125.       BorderStyle     =   1
  126.       Appearance      =   1
  127.       NumItems        =   0
  128.    End
  129.    Begin MSComctlLib.ListView ListView2 
  130.       Height          =   3975
  131.       Left            =   240
  132.       TabIndex        =   11
  133.       Top             =   840
  134.       Width           =   4575
  135.       _ExtentX        =   8070
  136.       _ExtentY        =   7011
  137.       View            =   3
  138.       LabelWrap       =   -1  'True
  139.       HideSelection   =   -1  'True
  140.       _Version        =   393217
  141.       ForeColor       =   -2147483640
  142.       BackColor       =   -2147483643
  143.       BorderStyle     =   1
  144.       Appearance      =   1
  145.       NumItems        =   0
  146.    End
  147.    Begin VB.Label ErrInf 
  148.       Caption         =   "1"
  149.       Height          =   375
  150.       Left            =   4920
  151.       TabIndex        =   12
  152.       Top             =   6240
  153.       Width           =   1335
  154.    End
  155.    Begin VB.Label FunctionName 
  156.       Height          =   615
  157.       Left            =   120
  158.       TabIndex        =   4
  159.       Top             =   120
  160.       Width           =   6255
  161.       WordWrap        =   -1  'True
  162.    End
  163.    Begin VB.Label Deviation 
  164.       Caption         =   "0.0001"
  165.       BeginProperty Font 
  166.          Name            =   "MS Sans Serif"
  167.          Size            =   8.25
  168.          Charset         =   204
  169.          Weight          =   700
  170.          Underline       =   0   'False
  171.          Italic          =   0   'False
  172.          Strikethrough   =   0   'False
  173.       EndProperty
  174.       Height          =   255
  175.       Left            =   1200
  176.       TabIndex        =   3
  177.       Top             =   6240
  178.       Width           =   3495
  179.    End
  180.    Begin VB.Label Label1 
  181.       Caption         =   "Deviation"
  182.       Height          =   255
  183.       Left            =   120
  184.       TabIndex        =   2
  185.       Top             =   6240
  186.       Width           =   855
  187.    End
  188. Attribute VB_Name = "Form1"
  189. Attribute VB_GlobalNameSpace = False
  190. Attribute VB_Creatable = False
  191. Attribute VB_PredeclaredId = True
  192. Attribute VB_Exposed = False
  193. Private Declare Function GetModuleFileName Lib "kernel32" _
  194.          Alias "GetModuleFileNameA" _
  195.          (ByVal hModule As Long, _
  196.          ByVal lpFileName As String, _
  197.          ByVal nSize As Long) As Long
  198. Dim FindGraph As Object
  199. Sub LogError()
  200.     'Print "error " & Err.Description
  201.     ErrInf.Caption = Err.Description
  202. End Sub
  203. Private Sub Command1_Click()
  204. End Sub
  205. Private Sub Form_Load()
  206.     On Error GoTo ErrHandler
  207.     ' Create object FindGraph
  208.     Set FindGraph = CreateObject("FindGraph.Document")
  209.     ' Run program FindGraph in new window
  210.     FindGraph.AppInit (1) ' 1 - visible, 0 - hiddden
  211.     Exit Sub
  212. ErrHandler:
  213.     LogError
  214.     Exit Sub
  215. End Sub
  216. Private Sub Form_Unload(Cancel As Integer)
  217.     On Error GoTo ErrHandler
  218.     ' Close FindGraph application
  219.     FindGraph.AppQuit
  220. ErrHandler:
  221.     Set FindGraph = Nothing
  222. End Sub
  223. Private Sub ListInit()
  224.     ListView1.ListItems.Clear
  225.     nw1 = ListView1.Width / 5
  226.     nw2 = ListView1.Width * 3 / 4
  227.     ListView1.ColumnHeaders.Add , , " ", nw1
  228.     ListView1.ColumnHeaders.Add , , "Coeff", nw2
  229.        
  230. '    Dim Col As ColumnHeader ' Declare variable
  231.  '   Set Col = ListView1.ColumnHeaders.Add , , " ", ListView1.Width / 5
  232.   '  Set Col = ListView1.ColumnHeaders.Add , , "Coeff", ListView1.Width * 3 / 4
  233. End Sub
  234. Private Sub ListAdd(i, Coef)
  235.     Dim Insert As ListItem
  236.     Set Insert = ListView1.ListItems.Add(, , CStr(i))
  237.     Insert.SubItems(1) = CStr(Coef)
  238. End Sub
  239. Private Sub ShowResults()
  240.     FunctionName.Caption = FindGraph.FuncApprString
  241.     NGet = FindGraph.ApprParamsNumber
  242.     Deviation.Caption = FindGraph.GetApprParam(NGet - 1)
  243.     ' Print "ub"; UBound(vaCoef)
  244.     ' Fill the grid with coefficients
  245.     ListInit
  246.     Dim fCoef As Double
  247.     For i = 1 To NGet - 1
  248.         fCoef = FindGraph.GetApprParam(i - 1)
  249.         ListAdd i, fCoef
  250.     Next i
  251. End Sub
  252. Private Sub ShowResultsVariant()
  253.     FunctionName.Caption = FindGraph.FuncApprString
  254.     Dim vaCoef As Variant
  255.     vaCoef = FindGraph.ArrayParams
  256.     NGet = UBound(vaCoef)
  257.     Deviation.Caption = vaCoef(NGet - 1)
  258.     ' Print "ub"; UBound(vaCoef)
  259.     ' Fill the grid with coefficients
  260.     ListInit
  261.     Dim fCoef As Double
  262.     For i = 1 To NGet - 1
  263.         fCoef = vaCoef(i - 1)
  264.         ListAdd i, fCoef
  265.     Next i
  266. End Sub
  267. Private Sub List2Init()
  268.     ListView2.ListItems.Clear
  269.     Dim Col As ColumnHeader ' Declare variable
  270.     Set Col = ListView2.ColumnHeaders.Add(, , " ", ListView1.Width / 6)
  271.     Set Col = ListView2.ColumnHeaders.Add(, , "X", ListView1.Width / 4)
  272.     Set Col = ListView2.ColumnHeaders.Add(, , "Y", ListView1.Width / 4)
  273.     Set Col = ListView2.ColumnHeaders.Add(, , "Yappr", ListView1.Width / 4)
  274. End Sub
  275. Private Sub List2Add(i, x, y0, y1)
  276.     Dim Insert As ListItem
  277.     Set Insert = ListView2.ListItems.Add(, , CStr(i))
  278.     Insert.SubItems(1) = CStr(x)
  279.     Insert.SubItems(2) = CStr(y0)
  280.     Insert.SubItems(3) = CStr(y1)
  281. End Sub
  282. Private Sub ShowDataVals(dwId, N, vaDots)
  283.     ' Fill the grid with Data
  284.     List2Init
  285.     Dim x, y0, y1 As Double
  286.     For i = 1 To N
  287.         it = (i - 1) * 3
  288.         x = vaDots(it)
  289.         y0 = vaDots(it + 1)
  290.         'y1 = vaDots(it + 2)
  291. ' You can calculate value
  292.         y1 = FindGraph.FuncApprInPoint(dwId, x)
  293.         List2Add i, x, y0, y1
  294.     Next i
  295. End Sub
  296. Private Sub ShowData(dwId)
  297.     Dim vaDots As Variant
  298.     vaDots = FindGraph.ArrayVar
  299.     NGet = UBound(vaDots)
  300.     'Print "ub"; UBound(vaDots)
  301.     ' Fill the grid with Data
  302.     List2Init
  303.     N = NGet / 3
  304.     Dim x, y0, y1 As Double
  305.     For i = 1 To N
  306.         it = (i - 1) * 3
  307.         x = vaDots(it)
  308.         y0 = vaDots(it + 1)
  309. ' FindGraph fills vaDots column Z with calculated values
  310.         y1 = vaDots(it + 2)
  311. ' Alternatively you can calculate value
  312. '       y1 = FindGraph.FuncApprInPoint(dwId, x)
  313.         List2Add i, x, y0, y1
  314.     Next i
  315. End Sub
  316. ' The examples show how to fit data
  317. ' Create new function named "Polynomial"
  318. Private Sub Polynomial_Click()
  319.     On Error GoTo ErrHandler
  320.     Dim dwDots, dwFunc, it, N As Long
  321.     Dim nIdFunc As Long
  322.     Dim fX, fY, fZ As Double
  323.     N = 100
  324.     Dim vaDots(300) As Variant
  325.     ' Create new series of points
  326.     dwDots = FindGraph.DotsNew(1, 2, 20, 1, "Polynomial")
  327.     ' Weighting
  328.     ' 0 No weight, Wi = 1
  329.     ' 1 Statistical, Wi = 1/Yi
  330.     ' 2 Statistical, Wi = Yi
  331.     ' 3 Statistical, Wi = 1/Xi
  332.     ' 4 Statistical, Wi = Xi
  333.     ' 5 Instrumental, Wi = 1/Zi^2
  334.     ' 6 Direct, Wi = Zi
  335.     FindGraph.Weighting = 0
  336.     ' Set the identifier of a series
  337.     FindGraph.ArrayId = dwDots
  338.     ' Fill array with points
  339.     For i = 1 To N
  340.         fX = CDbl(8# / N * i)
  341.         fY = CDbl(4# + 3 * Sin(3 / N * i))
  342.         fZ = CDbl(i)
  343.         it = (i - 1) * 3
  344.         vaDots(it) = fX
  345.         vaDots(it + 1) = fY
  346.         vaDots(it + 2) = fZ
  347.     Next i
  348.     ' Add all array at once
  349.     FindGraph.ArrayVar = vaDots
  350.     ' Approximation
  351.     nIdFunc = 0 'Polynomial
  352.     Dim vaParams(10) As Variant ' parameters for automation approximation
  353.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  354.     vaParams(1) = CDbl(3) ' nOrder for regression line or 0
  355.     FindGraph.FuncApprStart (nIdFunc)
  356.     FindGraph.ArrayVar = vaDots
  357.     FindGraph.ArrayParams = vaParams
  358.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Polynomial")
  359.     ShowDataVals dwFunc, N, vaDots
  360.   '  ShowData (dwFunc)
  361.     ShowResults
  362.     ErrInf.Caption = "Done"
  363.     FindGraph.FuncApprEnd
  364.     Exit Sub
  365. ErrHandler:
  366.     LogError
  367.     Exit Sub
  368. End Sub
  369. Private Sub Logistic_Click()
  370.     On Error GoTo ErrHandler
  371.     Dim dwDots, dwFunc, it, N As Long
  372.     Dim nIdFunc As Long
  373.     Dim fX, fY, fZ As Double
  374.     N = 100
  375.     Dim vaDots(300) As Variant
  376.     ' Create new series of points
  377.     dwDots = FindGraph.DotsNew(2, 2, 20, 1, "Logistic")
  378.     ' Set the identifier of a series
  379.     FindGraph.ArrayId = dwDots
  380.     ' Fill array with points
  381.     For i = 1 To N
  382.         fX = CDbl(8# / N * i)
  383.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  384.         fZ = CDbl(i)
  385.         it = (i - 1) * 3
  386.         vaDots(it) = fX
  387.         vaDots(it + 1) = fY
  388.         vaDots(it + 2) = fZ
  389.     Next i
  390.     ' Add all array at once
  391.     FindGraph.ArrayVar = vaDots
  392.     ' Approximation
  393.     nIdFunc = 50 'Logistic
  394.     Dim vaParams(10) As Variant ' parameters for automation approximation
  395.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  396.     vaParams(1) = CDbl(3) ' nOrder for regression line or 0
  397.     FindGraph.FuncApprStart (nIdFunc)
  398.     FindGraph.ArrayVar = vaDots
  399.     FindGraph.ArrayParams = vaParams
  400.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Logistic")
  401.     ShowDataVals dwFunc, N, vaDots
  402.     ShowResults
  403.     FindGraph.FuncApprEnd
  404.     Exit Sub
  405. ErrHandler:
  406.     LogError
  407.     Exit Sub
  408. End Sub
  409. Private Sub Fourie_Click()
  410.     On Error GoTo ErrHandler
  411.     Dim dwDots, dwFunc, it, N As Long
  412.     Dim nIdFunc As Long
  413.     Dim fX, fY, fZ As Double
  414.     N = 100
  415.     Dim vaDots(300) As Variant
  416.     ' Create new series of points
  417.     dwDots = FindGraph.DotsNew(3, 2, 20, 1, "Fourie")
  418.     ' Set the identifier of a series
  419.     FindGraph.ArrayId = dwDots
  420.     ' Fill array with points
  421.     For i = 1 To N
  422.         fX = CDbl(8# / N * i)
  423.         fY = CDbl(4# + 3 * Sin(10 / N * i))
  424.         fZ = CDbl(i)
  425.         it = (i - 1) * 3
  426.         vaDots(it) = fX
  427.         vaDots(it + 1) = fY
  428.         vaDots(it + 2) = fZ
  429.     Next i
  430.     ' Add all array at once
  431.     FindGraph.ArrayVar = vaDots
  432.     ' Approximation
  433.     nIdFunc = 60 'Fourie
  434.     Dim vaParams(10) As Variant ' parameters for automation approximation
  435.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  436.     vaParams(1) = CDbl(3) ' number of harmonics
  437.     FindGraph.FuncApprStart (nIdFunc)
  438.     FindGraph.ArrayVar = vaDots
  439.     FindGraph.ArrayParams = vaParams
  440.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Fourie")
  441.     ShowDataVals dwFunc, N, vaDots
  442.     ShowResults
  443.     FindGraph.FuncApprEnd
  444.     Exit Sub
  445. ErrHandler:
  446.     LogError
  447.     Exit Sub
  448. End Sub
  449. 'Piece linear
  450. Private Sub Curve_Click()
  451.     On Error GoTo ErrHandler
  452.     Dim dwDots, dwFunc, it, N As Long
  453.     Dim nIdFunc As Long
  454.     Dim fX, fY, fZ As Double
  455.     N = 100
  456.     Dim vaDots(300) As Variant
  457.     ' Create new series of points
  458.     dwDots = FindGraph.DotsNew(3, 2, 20, 1, "Piece linear")
  459.     ' Set the identifier of a series
  460.     FindGraph.ArrayId = dwDots
  461.     ' Fill array with points
  462.     For i = 1 To N
  463.         fX = CDbl(8# / N * i)
  464.         fY = CDbl(4# + 3 * Sin(10 / N * i))
  465.         fZ = CDbl(i)
  466.         it = (i - 1) * 3
  467.         vaDots(it) = fX
  468.         vaDots(it + 1) = fY
  469.         vaDots(it + 2) = fZ
  470.     Next i
  471.     ' Add all array at once
  472.     FindGraph.ArrayVar = vaDots
  473.     ' Approximation
  474.     nIdFunc = 20 'Fourie
  475.     Dim vaParams(10) As Variant ' parameters for automation approximation
  476.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  477.     vaParams(1) = CDbl(20) ' Number of steps
  478.     vaParams(2) = CDbl(0) ' If 1 - lines on centers of steps
  479.     FindGraph.FuncApprStart (nIdFunc)
  480.     FindGraph.ArrayVar = vaDots
  481.     FindGraph.ArrayParams = vaParams
  482.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Piece linear")
  483.     ShowDataVals dwFunc, N, vaDots
  484.     ShowResults
  485.     FindGraph.FuncApprEnd
  486.     Exit Sub
  487. ErrHandler:
  488.     LogError
  489.     Exit Sub
  490. End Sub
  491. ' It may be very SLOW
  492. Private Sub Neural_Click()
  493.     On Error GoTo ErrHandler
  494.     Dim dwDots, dwFunc, it, N As Long
  495.     Dim nIdFunc As Long
  496.     Dim fX, fY, fZ As Double
  497.     N = 20
  498.     Dim vaDots(60) As Variant
  499.     ' Create new series of points
  500.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "Neural")
  501.     ' Set the identifier of a series
  502.     FindGraph.ArrayId = dwDots
  503.     ' Fill array with points
  504.     For i = 1 To N
  505.         fX = CDbl(8# / N * i)
  506.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  507.         fZ = CDbl(i)
  508.         it = (i - 1) * 3
  509.         vaDots(it) = fX
  510.         vaDots(it + 1) = fY
  511.         vaDots(it + 2) = fZ
  512.     Next i
  513.     ' Add all array at once
  514.     FindGraph.ArrayVar = vaDots
  515.     ' Approximation
  516.     nIdFunc = 70 'Neural network approximation
  517.     Dim vaParams(10) As Variant ' parameters for automation approximation
  518.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  519.     vaParams(1) = CDbl(8) ' Number of neurons
  520.     vaParams(2) = CDbl(4) ' Parameter A
  521.     vaParams(3) = CDbl(0.0001) ' Step
  522.     vaParams(4) = CDbl(1000) ' Maximum number of iterations
  523.     FindGraph.FuncApprStart (nIdFunc)
  524.     FindGraph.ArrayVar = vaDots
  525.     FindGraph.ArrayParams = vaParams
  526.     dwFunc = FindGraph.FuncApprCreate(4, 10, "Neural")
  527.     ShowDataVals dwFunc, N, vaDots
  528.     ShowResults
  529.     FindGraph.FuncApprEnd
  530.     Exit Sub
  531. ErrHandler:
  532.     LogError
  533.     Exit Sub
  534. End Sub
  535. Private Sub Nonlinear_Click()
  536.     On Error GoTo ErrHandler
  537.     Dim dwDots, dwFunc, it, N As Long
  538.     Dim nIdFunc As Long
  539.     Dim fX, fY, fZ As Double
  540.     N = 20
  541.     Dim vaDots(60) As Variant
  542.     ' Create new series of points
  543.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "Nonlinear")
  544.     ' Set the identifier of a series
  545.     FindGraph.ArrayId = dwDots
  546.     ' Fill array with points
  547.     For i = 1 To N
  548.         fX = CDbl(8# / N * i)
  549.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  550.         fZ = CDbl(i)
  551.         it = (i - 1) * 3
  552.         vaDots(it) = fX
  553.         vaDots(it + 1) = fY
  554.         vaDots(it + 2) = fZ
  555.     Next i
  556.     ' Add all array at once
  557.     FindGraph.ArrayVar = vaDots
  558.     ' Approximation
  559.     nIdFunc = 88 ' Non-linear (predefined function)
  560.     Dim vaParams(20) As Variant ' parameters for automation approximation
  561.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  562.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  563.     vaParams(2) = CDbl(1060) ' Fitting curve Equation, parabola+sqrt for example
  564.     vaParams(3) = CDbl(1000) ' Fitting Model, polynomial for example
  565.     vaParams(4) = CDbl(0.0001) ' Step
  566.     vaParams(5) = CDbl(1000) ' Number of Iterations
  567.     vaParams(6) = CDbl(0) ' Model, 0 - Simplex, 1 - Gradient
  568.     vaParams(7) = CDbl(0) ' If > 0 - Normalize X
  569.     vaParams(8) = CDbl(0) ' Initial value of parameter A
  570.     vaParams(9) = CDbl(0.5) ' Initial value of parameter B
  571.     vaParams(10) = CDbl(0.5) ' Initial value of parameter C
  572.     vaParams(11) = CDbl(0) ' Initial value of parameter D
  573.     vaParams(12) = CDbl(0) ' Initial value of parameter G
  574.     vaParams(13) = CDbl(0) ' If > 0 Fixed parameter A
  575.     vaParams(14) = CDbl(0) ' If > 0 Fixed parameter B
  576.     vaParams(15) = CDbl(0) ' If > 0 Fixed parameter C
  577.     vaParams(16) = CDbl(0) ' If > 0 Fixed parameter D
  578.     'Uncomment it to set your own formula
  579.     'Pay attention, the calculation may be VERY SLOW
  580.     'nIdFunc = 90 ' Non-linear (formula)
  581.     'FindGraph.FuncApprString = "a+b*u+c*u*u+d*sin(u)"
  582.     FindGraph.FuncApprStart (nIdFunc)
  583.     FindGraph.ArrayVar = vaDots
  584.     FindGraph.ArrayParams = vaParams
  585.     dwFunc = FindGraph.FuncApprCreate(4, 10, "Nonlinear")
  586.     ShowDataVals dwFunc, N, vaDots
  587.     ShowResults
  588.     FindGraph.FuncApprEnd
  589.     Exit Sub
  590. ErrHandler:
  591.     LogError
  592.     Exit Sub
  593. End Sub
  594. Private Sub Regression_Click()
  595.     On Error GoTo ErrHandler
  596.     Dim dwDots, dwFunc, it, N As Long
  597.     Dim nIdFunc As Long
  598.     Dim fX, fY, fZ As Double
  599.     N = 20
  600.     Dim vaDots(60) As Variant
  601.     ' Create new series of points
  602.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "Regression")
  603.     ' Set the identifier of a series
  604.     FindGraph.ArrayId = dwDots
  605.     ' Fill array with points
  606.     For i = 1 To N
  607.         fX = CDbl(8# / N * i)
  608.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  609.         fZ = CDbl(i)
  610.         it = (i - 1) * 3
  611.         vaDots(it) = fX
  612.         vaDots(it + 1) = fY
  613.         vaDots(it + 2) = fZ
  614.     Next i
  615.     ' Add all array at once
  616.     FindGraph.ArrayVar = vaDots
  617.     ' Approximation
  618.     nIdFunc = 10 ' Linear Regression
  619.     NParams = 72
  620.     Dim vaParams(73) As Variant ' parameters for automation approximation
  621.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  622.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  623.     For i = 2 To NParams
  624.         vaParams(i) = CDbl(0)
  625.     Next i
  626.         
  627.     ' Polynomial
  628.     N1 = 2 'V(U) = V0 + a11*(U-U1)/W1 + a12*((U-U1)/W1)^2 + ...
  629.      vaParams(N1 + 0) = CDbl(0) ' U1
  630.      vaParams(N1 + 1) = CDbl(1) ' W1
  631.      vaParams(N1 + 2) = CDbl(1) ' If > 0 use V0 (const)
  632.      vaParams(N1 + 3) = CDbl(1) ' If > 0 use a11*U
  633.      vaParams(N1 + 4) = CDbl(1) ' If > 0 use a12*U^2
  634.      vaParams(N1 + 5) = CDbl(1) ' If > 0 use a13*U^3
  635.      vaParams(N1 + 6) = CDbl(1) ' If > 0 use a14*U^4
  636.         
  637.     N2 = 12 'V(U) =... + a21*W2/(U-U2) + a22*(W2/(U-U2))^2 + ...
  638.      vaParams(N2 + 0) = CDbl(0) ' U2
  639.      vaParams(N2 + 1) = CDbl(1) ' W2
  640.      vaParams(N2 + 3) = CDbl(1) ' If > 0 use a21*W2/(U-U2)
  641.     N3 = 22 'V(U) =... + a31*sqr((U-U3)/W3) + a32/sqr((U-U3)/W3) + ...
  642.     N4 = 32 'V(U) =... + a41*ln (U-U4)/W4 + a42* (ln((U-U4)/W4)^2 + ...
  643.     N5 = 42 'V(U) =... + a51*exp(U-U5)/W5 + a52* exp(2*(U-U5)/W5) + ...
  644.     N6 = 52 'V(U) =... + a61*sin(U-U6)/W6 + a62* sin(2*(U-U6)/W6) + ...
  645.     N7 = 62 'V(U) =... + a71*cos(U-U6)/W6 + a72* cos(2*(U-U7)/W6) + ...
  646.         
  647.         
  648.         
  649.     FindGraph.FuncApprStart (nIdFunc)
  650.     FindGraph.ArrayVar = vaDots
  651.     FindGraph.ArrayParams = vaParams
  652.     dwFunc = FindGraph.FuncApprCreate(4, 10, "Regression")
  653.     ShowDataVals dwFunc, N, vaDots
  654.     ShowResults
  655.     FindGraph.FuncApprEnd
  656.     Exit Sub
  657. ErrHandler:
  658.     LogError
  659.     Exit Sub
  660. End Sub
  661. Private Sub User_Click()
  662.     On Error GoTo ErrHandler
  663.     Dim dwDots, dwFunc, it, N As Long
  664.     Dim nIdFunc As Long
  665.     Dim fX, fY, fZ As Double
  666.     N = 20
  667.     Dim vaDots(60) As Variant
  668.     ' Create new series of points
  669.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "User DLL")
  670.     ' Set the identifier of a series
  671.     FindGraph.ArrayId = dwDots
  672.     ' Fill array with points
  673.     For i = 1 To N
  674.         fX = CDbl(8# / N * i)
  675.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  676.         fZ = CDbl(i)
  677.         it = (i - 1) * 3
  678.         vaDots(it) = fX
  679.         vaDots(it + 1) = fY
  680.         vaDots(it + 2) = fZ
  681.     Next i
  682.     ' Add all array at once
  683.     FindGraph.ArrayVar = vaDots
  684.     ' Approximation
  685.     nIdFunc = 80 ' User defined Plug-In DLL
  686.     Dim vaParams(20) As Variant ' parameters for automation approximation
  687.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  688.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  689.     vaParams(2) = CDbl(0) ' Parameter 1
  690.     vaParams(3) = CDbl(1) ' Parameter 2
  691.     vaParams(4) = CDbl(0) ' Parameter 3
  692.     vaParams(5) = CDbl(0) ' Parameter 4
  693.     FindGraph.FuncApprStart (nIdFunc)
  694.     FindGraph.ArrayVar = vaDots
  695.     FindGraph.ArrayParams = vaParams
  696.     FindGraph.FuncApprString = "fit_exp.dll"
  697.     dwFunc = FindGraph.FuncApprCreate(5, 10, "User DLL")
  698.     ShowDataVals dwFunc, N, vaDots
  699.     ShowResults
  700.     FindGraph.FuncApprEnd
  701.     Exit Sub
  702. ErrHandler:
  703.     LogError
  704.     Exit Sub
  705. End Sub
  706. Private Sub BSpline_Click()
  707.     On Error GoTo ErrHandler
  708.     Dim dwDots, dwFunc, it, N As Long
  709.     Dim nIdFunc As Long
  710.     Dim fX, fY, fZ As Double
  711.     N = 20
  712.     Dim vaDots(60) As Variant
  713.     ' Create new series of points
  714.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "User DLL")
  715.     ' Set the identifier of a series
  716.     FindGraph.ArrayId = dwDots
  717.     ' Fill array with points
  718.     For i = 1 To N
  719.         fX = CDbl(8# / N * i)
  720.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  721.         fZ = CDbl(i)
  722.         it = (i - 1) * 3
  723.         vaDots(it) = fX
  724.         vaDots(it + 1) = fY
  725.         vaDots(it + 2) = fZ
  726.     Next i
  727.     ' Add all array at once
  728.     FindGraph.ArrayVar = vaDots
  729.     ' Approximation
  730.     nIdFunc = 32 '  B-spline
  731.     Dim vaParams(20) As Variant ' parameters for automation approximation
  732.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  733.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  734.     vaParams(2) = CDbl(0) ' Unused
  735.     vaParams(3) = CDbl(0) ' 0 - approximation, 1 - interpolation
  736.     vaParams(4) = CDbl(0) ' 1 - closed curve
  737.     vaParams(5) = CDbl(12) ' number of control points: 1-12
  738.     vaParams(6) = CDbl(3) ' Degree: 1-6
  739.     FindGraph.FuncApprStart (nIdFunc)
  740.     FindGraph.ArrayVar = vaDots
  741.     FindGraph.ArrayParams = vaParams
  742.     FindGraph.FuncApprString = "fit_exp.dll"
  743.     dwFunc = FindGraph.FuncApprCreate(5, 10, "B-Spline")
  744.     ShowDataVals dwFunc, N, vaDots
  745.     ShowResults
  746.     FindGraph.FuncApprEnd
  747.     Exit Sub
  748. ErrHandler:
  749.     LogError
  750.     Exit Sub
  751. End Sub
  752.